;(function($){
    'use strict';

    //- 检测是否移动终端
    const mobile = !!navigator.userAgent.match(/AppleWebKit.*Mobile.*/);

    $.fn.extend({
        //- 点击事件，防滑动时触发点击事件
        m_touch: function (cb) {
            //- 没有必要再作 $(this)，因为 “this” 已经是jQuery对象了
            // console.info(this);
            // console.info($(this));

            //- 是否发生拖动
            var dragging = false;

            //- .off() 解绑事件，防止事件重复绑定
            return mobile ? this.off().on('touchstart', function () {
                //- 移除当前获得焦点的元素
                if (document.activeElement) document.activeElement.blur();

                //- 重置拖动状态
                dragging = false;
            }).on('touchmove', function () {
                //- 发生拖动，值设为true
                //- 只重置一次，防止来回拖动重复重置
                // dragging || (dragging = !dragging);
                if (!dragging) dragging = !dragging;
            }).on('touchend', function (event) {
                //- 发生拖动，则不继续往下执行
                if (dragging) return;

                //- 阻止元素发生默认的行为
                event.preventDefault();
                //- 阻止事件冒泡
                event.stopPropagation();

                //- 执行回调方法
                if(cb) cb.call(this);
            }) : this.on('click', function (event) {
                event.preventDefault();
                event.stopPropagation();

                if(cb) cb.call(this);
            });
        },
        //- 事件委托 - 解决元素动态添加时事件绑定问题
        //- items：子元素
        //- cb   ：回调方法
        m_delegate: function (items, cb) {
            var dragging = false;

            return mobile ? this.on('touchstart', items, function () {
                dragging = false;
            }).on('touchmove', items, function () {
                if (!dragging) dragging = !dragging;
            }).on('touchend', items, function (event) {
                if (dragging) return;

                event.preventDefault();
                event.stopPropagation();

                if (cb) cb.call(this);
            }) : this.on('click', items, function (event) {
                event.preventDefault();
                event.stopPropagation();

                if (cb) cb.call(this);
            });
        },
        //- 自动点击事件
        m_auto_touch: function () {
            $(this).trigger(mobile ? 'touchend' : 'click');
        }
    });

})($);